<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // reduce循环： 累加结果值 ；
        // var arr = [1,2,3,4,5];

        // var res =   arr.reduce(function(current,item,key,arr){
        //     console.log(current,item,key,arr);
        //     return current + item;  // 返还的值会作为下一次的 current值；
        // },0)

        // console.log("最终的累加值是",res);
        /* 
            第一次 ： 初始值是0  作为 current 的值   item 就是1 
                        返还值 current  + item    ===  1；  会作为下一次循环的current值；
            第二次 ： current 值是  1    item的值是  2
                        返还值是  ： current + item === 3；
            第三次： currnet 的值 3   item 3 
                        返还值  current + item === 6;
            第四次： currnet 的值 6   item 4 
                        返还值  current + item === 10;
            第五次 ： current 的值是 10  item是 5
                        返还值  current + item  ===15  作为 最终值res 是  15;
        */


        // 万物可累加 
        // 累加数组  
        // var arr  = ["a","a","c"];  // 把这个数组去重复 然后放在一个新数组里
        // var newarr = [];
        // // ["a"]
        // for(var i=0;i<arr.length;i++){
        //     if(newarr.indexOf(arr[i])===-1){
        //         newarr.push(arr[i]);
        //     }
        // }
        // console.log(newarr);

        //    console.log(  arr.indexOf("f"));

        // 利用reduce 实现数组的去重 
        // var arr  = ["a","a","c"];
        // arr.reduce(function(current,item){
        //     if(current.indexOf(item)===-1){
        //         current.push(item);
        //     }
        //     return current;
        // },[])

        /* 
        第一次 ：初始值是[]  --- current = [] 
                    判断 [].indexOf("a") ----》 -1  进入判断  current 变成 ['a'];
                    返还 current 的值 ['a']
        第二次 : current = ['a']   item 的值 a  
                    判断 ["a"].indexOf("a")  ---》0 不是-1  不会进入判断  current还是 ['a']
                     返还  current 值 ['a']
        第三次 ： current = ['a']   item 的值 c
                    判断  ['a'].indexOf("c")  === -1 进入判断  current 变成 ["a","c"];
                    返还current == ["a","c"] 最终结果 就是 ["a","c"];
        
        */



        // 对象的累加 
        var arr = ["a", "a", "a", "c", "b", "b"];
        // 生成一个对象  
        /* 
            var obj = {
                a:3,
                b:2,
                c:1
            }
        */

        // for循环 
        var obj = {
        };
        // console.log(obj.a);
        // obj.a
        for (var i = 0; i < arr.length; i++) {
            // 查看obj对象里有没有 数组里的属性 
            // 判断 如果 obj里没有这个属性，那么就在obj里添加这个属性
            if (typeof obj[arr[i]] === "undefined") {
                obj[arr[i]] = 1;
            } else {
                obj[arr[i]]++;
            }
        }
        console.log(obj);

        var res = arr.reduce(function (current, item) {
            if (typeof current[item] === "undefined") {
                current[item] = 1;
            } else {
                current[item]++;
            }
            return current;
        }, {});
        console.log(res);

    </script>
</body>

</html>